﻿Imports Microsoft.VisualStudio.TestTools.UnitTesting
Imports FairShop

'''<summary>
'''This is a test class for Utility and is intended
'''to contain all Utility Unit Tests
'''</summary>
<TestClass()> _
Public Class TestUtility

    Private testContextInstance As TestContext

    '''<summary>
    '''Gets or sets the test context which provides
    '''information about and functionality for the current test run.
    '''</summary>
    Public Property TestContext() As TestContext
        Get
            Return testContextInstance
        End Get
        Set(ByVal value As TestContext)
            testContextInstance = value
        End Set
    End Property

#Region "Additional test attributes"
    '
    'You can use the following additional attributes as you write your tests:
    '
    'Use ClassInitialize to run code before running the first test in the class
    <ClassInitialize()> _
    Public Shared Sub MyClassInitialize(ByVal testContext As TestContext)
        Utility.InitializeData()
    End Sub
    '
    'Use ClassCleanup to run code after all tests in a class have run
    '<ClassCleanup()>  _
    'Public Shared Sub MyClassCleanup()
    'End Sub
    '
    'Use TestInitialize to run code before running each test
    '<TestInitialize()>  _
    'Public Sub MyTestInitialize()
    'End Sub
    '
    'Use TestCleanup to run code after each test has run
    <TestCleanup()> _
    Public Sub MyTestCleanup()
        Utility.ResetData()  ' zodat eventuele overgebleven wijzigingen niet doorgaat naar andere tests
    End Sub
    '
#End Region

    '''<summary>
    '''A test for IsVerkoopGeannuleerd
    '''</summary>
    <TestMethod()> _
    Public Sub IsVerkoopGeannuleerd_1artikel_Match_Test()
        Dim verkoop As ArtikelsDataSet.VerkopenRow = Utility.Data.Verkopen.NewVerkopenRow()

        AddDetail(verkoop, Utility.Data.Artikels.First().Id, 5)
        AddDetail(verkoop, Utility.Data.Artikels.First().Id, -5)

        Utility.Data.Verkopen.AddVerkopenRow(verkoop)

        Assert.AreEqual(True, Utility.IsVerkoopGeannuleerd(verkoop))
    End Sub

    '''<summary>
    '''A test for IsVerkoopGeannuleerd
    '''</summary>
    <TestMethod()> _
    Public Sub IsVerkoopGeannuleerd_1artikel_GeenMatchAantal_Test()
        Dim verkoop As ArtikelsDataSet.VerkopenRow = Utility.Data.Verkopen.NewVerkopenRow()

        AddDetail(verkoop, Utility.Data.Artikels.First().Id, 5)
        AddDetail(verkoop, Utility.Data.Artikels.First().Id, -4)

        Utility.Data.Verkopen.AddVerkopenRow(verkoop)

        Assert.AreEqual(False, Utility.IsVerkoopGeannuleerd(verkoop))
    End Sub

    '''<summary>
    '''A test for IsVerkoopGeannuleerd
    '''</summary>
    <TestMethod()> _
    Public Sub IsVerkoopGeannuleerd_1artikel_GeenMatchArtikel_Test()
        Dim verkoop As ArtikelsDataSet.VerkopenRow = Utility.Data.Verkopen.NewVerkopenRow()

        AddDetail(verkoop, Utility.Data.Artikels.First().Id, 5)

        Utility.Data.Verkopen.AddVerkopenRow(verkoop)

        Assert.AreEqual(False, Utility.IsVerkoopGeannuleerd(verkoop))
    End Sub

    '''<summary>
    '''A test for IsVerkoopGeannuleerd
    '''</summary>
    <TestMethod()> _
    Public Sub IsVerkoopGeannuleerd_2artikels_Match_Test()
        Dim verkoop As ArtikelsDataSet.VerkopenRow = Utility.Data.Verkopen.NewVerkopenRow()

        AddDetail(verkoop, Utility.Data.Artikels.First().Id, 5)
        AddDetail(verkoop, Utility.Data.Artikels.First().Id, -5)
        AddDetail(verkoop, Utility.Data.Artikels.Last().Id, 10)
        AddDetail(verkoop, Utility.Data.Artikels.Last().Id, -10)

        Utility.Data.Verkopen.AddVerkopenRow(verkoop)

        Assert.AreEqual(True, Utility.IsVerkoopGeannuleerd(verkoop))
    End Sub

    '''<summary>
    '''A test for IsVerkoopGeannuleerd
    '''</summary>
    <TestMethod()> _
    Public Sub IsVerkoopGeannuleerd_2artikels_GeenMatchAantal_Test()
        Dim verkoop As ArtikelsDataSet.VerkopenRow = Utility.Data.Verkopen.NewVerkopenRow()

        AddDetail(verkoop, Utility.Data.Artikels.First().Id, 5)
        AddDetail(verkoop, Utility.Data.Artikels.First().Id, -5)
        AddDetail(verkoop, Utility.Data.Artikels.Last().Id, 10)
        AddDetail(verkoop, Utility.Data.Artikels.Last().Id, -11)

        Utility.Data.Verkopen.AddVerkopenRow(verkoop)

        Assert.AreEqual(False, Utility.IsVerkoopGeannuleerd(verkoop))
    End Sub

    '''<summary>
    '''A test for IsVerkoopGeannuleerd
    '''</summary>
    <TestMethod()> _
    Public Sub IsVerkoopGeannuleerd_2artikels_GeenMatchArtikel_Test()
        Dim verkoop As ArtikelsDataSet.VerkopenRow = Utility.Data.Verkopen.NewVerkopenRow()

        AddDetail(verkoop, Utility.Data.Artikels.First().Id, 5)
        AddDetail(verkoop, Utility.Data.Artikels.First().Id, -5)
        AddDetail(verkoop, Utility.Data.Artikels.Last().Id, 10)

        Utility.Data.Verkopen.AddVerkopenRow(verkoop)

        Assert.AreEqual(False, Utility.IsVerkoopGeannuleerd(verkoop))
    End Sub

    Private Shared Sub AddDetail(ByVal verkoop As ArtikelsDataSet.VerkopenRow, ByVal idArtikel As Integer, ByVal aantal As Integer)
        Dim detail As ArtikelsDataSet.VerkoopsDetailsRow = Utility.Data.VerkoopsDetails.NewVerkoopsDetailsRow()
        detail.IdArtikel = idArtikel
        detail.Aantal = aantal
        detail.VerkopenRow = verkoop
        Utility.Data.VerkoopsDetails.AddVerkoopsDetailsRow(detail)
    End Sub

End Class
